// 血缘 extends
function objectFactory(){ // 手写 new
    // Person 普通函数运行一下 apply (p?)
    let obj={};// 没有血缘关系 原型式面向对象 
    // 伪数组  把shift 方法借给arguments 用 数组this指向arguments
    var Constructor=[].shift.call(arguments);
    // console.log(arguments,'-----------');
    obj.__proto__=Constructor.prototype;// 指定原型
    var ret=Constructor.apply(obj,arguments)
    return typeof ret==='object' ? ret || obj : obj;// 实例 如果有返回值就用返回值 没有就走obj
    // 如果返回是null 就返回obj
}

function Person(name,age){// 编程风格，遵守
    this.name=name;
    this.age=age;
    // return 1;
    return null;// 忽略
    // return{
    //     name,
    //     age,
    //     bb:'11'
    // }
}

// const p=new Person('菠萝头',18);
// console.log(p.name);
let p=objectFactory(Person,'菠萝头',18); // 引用式赋值
console.log(p);